protected override void Execute() { var d1 = (Close >> 1) - (Close >> 2); var d2 = (Close >> 2) - (Close >> 3); var d3 = (Close >> 3) - (Close >> 4); var d4 = (Close >> 4) - (Close >> 5); for (int i = 5; i < Bars.Count-2; i++) { double A = d1[i]*d4[i] - d2[i]*d3[i]; double B = d2[i]*d2[i] - d1[i]*d3[i]; double id = A*d1[i] + B*d2[i]; int posDir = (! IsLastPositionActive) ? 0 : LastPosition.PositionType == PositionType.Long ? 1 : -1; if (id >= 0 && posDir != 1) { if (posDir == -1) ExitAtClose (i, LastPosition); BuyAtClose (i); } else if (id < 0 && posDir != -1) { if (posDir == 1) ExitAtClose (i, LastPosition); ShortAtClose (i); } } // for (int i } // Execute()даёт результаты на минутках на 68 днях от 10:00 до 18:44 для сделок без комиссии и проскальзывания
StrategyName Growth SANDP-500_010216_220131dayly Weekly ini 1326.6100 fin 4546.5400 growth 3.4272 bars 1091 years 20.9699 year% 6.0498 mean% 12.3421 nn;HiIdx;HiMax ; HiDate ; LoIdx;LoMin ; LoDate ;Days ;Drawdown ;Pct>=20 0; 0; 1326.61; 17.02.2001; 86; 768.63; 11.10.2002; 601; 557.98; 42.06 1; 344; 1576.03; 13.10.2007; 417; 667.04; 07.03.2009; 511; 908.99; 57.68 2; 530; 1370.58; 06.05.2011; 552; 1075.09; 07.10.2011; 154; 295.49; 21.56 3; 915; 2940.91; 21.09.2018; 929; 2346.58; 28.12.2018; 98; 594.33; 20.21 4; 989; 3393.52; 21.02.2020; 994; 2192.07; 27.03.2020; 35; 1201.45; 35.40 Самая долгая просадка 0; 0; 1326.61; 17.02.2001; 86; 768.63; 11.10.2002; 601; 557.98; 42.06 Наибольшая абсолютная 4; 989; 3393.52; 21.02.2020; 994; 2192.07; 27.03.2020; 35; 1201.45; 35.40 Наибольшая относительная 1; 344; 1576.03; 13.10.2007; 417; 667.04; 07.03.2009; 511; 908.99; 57.68Результаты по NASDAQ
for (int i = i0; i < weeks.Count; ++i) { int idxIni = IndexOf (weeks[i][0]-1, entryTime); int idxFin = IndexOf (weeks[i][1], exitTime); double strike = mwu.RoundTo (Open[idxIni], strikeStep); double dura = (Date[idxFin] - Date[idxIni]).TotalDays; double calIni = OptPrice ('C', Open[idxIni], strike, dura, volaIni); double putIni = OptPrice ('P', Open[idxIni], strike, dura, volaIni); double calFin = OptPrice ('C', Close[idxFin], strike, 1e-6, volaFin); double putFin = OptPrice ('P', Close[idxFin], strike, 1e-6, volaFin); double win = (calIni+putIni) * (1-slpg) - (calFin+putFin) - 2*fee; PrintDebug (String.Format (fmt, i, Date[idxFin].ToShortDateString() ,calIni, putIni, calFin, putFin, win)); } // for (int i = i0Вот выдача за первый квартал
Это дополнение «Снова Фьючерс на индекс ММВБ. Грааль для терпил» smart-lab.ru/blog/699619.php
На этот раз гоняем историю фьючерса GOLD. Но для сопоставимости с MXI сразу конвертируем доллары в рубли по курсам на каждый день торгов.
Игнорируем, что фьючерс на золото торгуется в контанго. Не суть! Используем почти тот же алгоритм, что в предыдущей статье, на те же 73 квартала с марта 2003.
Изменение в том, что WealthLab заглючил на истории золота и в одном баре не закрывает позицию по заданной цене. Пришлось делать роллирование по цене открытия дня, следующего за экспирацией.
Оптимизированные параметры: триггер скользящего стопа 25%, реверс 5%, убыток 10%.
Выигрыш 120788.33 руб. Просадка 30820.10 руб на 08.03.2021. От максимума цены позиции 154559 руб на 06.08.2020 это 19.94%.
Теперь для подсчёта прибыльности я беру не конечную цену актива, но среднюю за все дни, равную 52641.90 руб.
Связанные средства: ГО + резерв = 9306.61 * 1.25 = 11633.26 руб; Вариационка = 52641.90 * 0.25 = 13160.48 руб.
Итого: 24793.73 руб. округлим до 25000 руб.
При среднем выигрыше за квартал 1654.63 руб это даёт квартальную прибыльность 6.62%. На год в среднем 26.47%.
Следует отметить 6 проигрышных подряд кварталов 2012-2013 и ещё 5 случаев по 2 проигрыша подряд. Учитывая, что ФРС уже почти израсходовала свой боезапас, вряд ли возможно повторение 2012 года.
Это дополнение к «Фьючерс на индекс ММВБ. Математические ожидания и реальная ретроспекция» smart-lab.ru/blog/699584.php
Т.к. фьючерс на индекс ММВБ торгуется в бэквордации, его историю можно заменить более длинной историей самого индекса, если: 1) умножить индекс на 10 и 2) роллировать позицию в дни экспирации по цене (Open+Close)/2.
И тогда можно представить, как можно было, играя в MXI (малый фьючерс), пережить и 2008, и 2020 годы.
Подробности алгоритма в предыдущей статье. Последний тест на 73 кварталах от марта 2003 дал для фьючерса MXI выигрыш 50549.20 руб. Наибольшая просадка выигрыша 10923.10 руб на 18.03.2020 от максимума 44498.90 руб 20.01.2020 с объёмом позиции 32268.90 руб (33.85% от объёма).
В 2008 просадка скромнее, Но относительном объёма позиции примерно та же.
Средний выигрыш на квартал 692.50 руб. Относительно связанных средств 15000 руб (завышенная оценка) это даёт квартальную прибыльность 4.62% или 18.47% годовых.
Стоп-лосс сработал только однажды, 06.08.2008. Скользящий стоп фиксировал прибыль 15 раз. Оптимизированные параметры: триггер скользящего стопа 20%, реверс 0%. Убыток 25% на квартал я назначил из психологических соображений.
Следует также отметить три проигрышных подряд квартала в 2011. И ещё два случая по два проигрышных квартала подряд.
На графике показан выигрыш индекса ММВБ, не умноженный на 10
Плоские участки в 2008 показывают досрочные закрытия позиции.
Игра в купи и держи даёт выигрыш 39501.70 руб с просадкой 13610.70 руб.